package me.ilich.piet.interpreter.commands;

import me.ilich.piet.interpreter.Stack.Context;

public class RollCommand implements Command {

	@Override
	public void onExecute(Context context) {
		final int size = context.getStackState().getData().size();
		if(size>2){			
			int number = context.getStackState().getData().get(size-1);
			int depth = context.getStackState().getData().get(size-2);
			context.getStackState().getData().remove(size-1);
			context.getStackState().getData().remove(size-2);
			if(depth>0){
				if(number>0){
					for(int k=0; k<number; k++){
						int temp = context.getStackState().getData().get(size-3);
						context.getStackState().getData().add(size-2-depth, Integer.valueOf(temp));
						context.getStackState().getData().remove(size-2);
					}
				}else{
					for(int k=number; k<0; k++){
						int temp = context.getStackState().getData().get(size-2-depth);
						context.getStackState().getData().add(size-2, Integer.valueOf(temp));
						context.getStackState().getData().remove(size-2-depth);												
					}
				}
			}
		}
		
	}


}
